﻿/********************************************************************************
** 作者： 吴汉阳
** 创建时间： 2009-5-12
** 描述：
** 新增量-涉及到的公共方法
********************************************************************************/

/*
** 描述： 扩展翻页的Toolbar控件，
*/
Ext.override(Ext.PagingToolbar, {
    doLoad: function(start) {
        var o = {}; //, pn = this.paramNames;
        //o[pn.start] = start;
        //o[pn.limit] = this.pageSize;
        this.store.lastOptions.params.start = start;
        this.store.lastOptions.params.limit = this.pageSize;
        if (this.fireEvent('beforechange', this, o) !== false) {
            this.store.load({ params: this.store.lastOptions.params });
        }
    }
});

//****************************************************
//  名      称：ShowMessage
//  说      明：弹出显示出错信息
//  参      数：无
//  返  回  值：无
//              
//
//---------------------------------------------------
//  作者：谭传锐   最新修改时间：2009/5/26
//****************************************************
function showMessage(title, message, detailMessage) {
    var html = '<table width="200" border="0"><tr><td style="padding-left:10px;width:40px;">';
    html += '<div style="height:40px;" class="ext_div_ico_error"/>&nbsp;';
    html += '</td><td style="padding-left:10px;">' + message + '</td></tr></table>';
    html += '<div id="showMessageId" style="display:none;">';
    html += '<textarea style="height:90px;width:280px;" class="x-form-textarea x-form-field" readonly="true">错误详细信息\n\n' + detailMessage + '</textarea></div>';
    var win = new Ext.Window({
        title: title,
        autoCreate: true,
        resizable: false,
        constrain: true,
        constrainHeader: true,
        minimizable: false,
        maximizable: false,
        stateful: false,
        modal: true,
        shim: true,
        buttonAlign: "center",
        width: 300,
        height: 110,
        minHeight: 80,
        plain: true,
        footer: true,
        closable: true,
        border: false,
        html: html,
        buttons: [{
            minWidth: 120,
            id: 'PublicShowHideError',
            text: '显示失败原因',
            onClick: function() {
                if (document.getElementById('showMessageId').style.display == '') {
                    document.getElementById('showMessageId').style.display = 'none';
                    Ext.getCmp("PublicShowHideError").setText("显示失败原因");
                    win.setSize(300, 110);
                } else {
                    document.getElementById('showMessageId').style.display = '';
                    Ext.getCmp("PublicShowHideError").setText("隐藏失败原因");
                    win.setSize(300, 210);
                }
            }
        }, {
            text: '确 定',
            onClick: function() {
                win.close();
            }
}]
        });
        win.show();
    }

    // 封装返回的json信息
    function parseJsonResult(json) {
        return eval("(" + json + ")");
    }
    // 设置按钮的CSS样式 #开始------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function setBtnCss(sID, sSize, sStatus) {
        var btn_general_style = ""; var btn_general_small_style = ""; var btn_detail_style = "";
        if (!sStatus) {
            btn_general_style = "{ width:69px; height:21px; background-image:url(../images/btn_3.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}";
            btn_general_small_style = "{ width:40px; height:21px; background-image:url(../images/btn_5.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}";
            btn_detail_style = "{ width:90px; height:21px; background-image:url(../images/btn_4.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}"
        }
        else {
            btn_general_style = "{ width:69px; height:21px; background-image:url(../images/s_btn_3.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}";
            btn_general_small_style = "{ width:40px; height:21px; background-image:url(../images/s_btn_5.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}";
            btn_detail_style = "{ width:90px; height:21px; background-image:url(../images/s_btn_4.gif); border:0px; font-size:12px; color:#FFF; line-height:21px;}"
        }
        if (sSize == "big")
            document.getElementById(sID).style.cssText = btn_detail_style;
        if (sSize == "small")
            document.getElementById(sID).style.cssText = btn_general_small_style;
        else if (sSize == "mid")
            document.getElementById(sID).style.cssText = btn_general_style;

        Ext.get(sID).dom.disabled = sStatus;
    }
    // 设置按钮的CSS样式 #结束------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // 判断字符串的长度 #开始------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    function GetStrLength(str) {
        var i, sum;
        sum = 0;
        for (i = 0; i < str.length; i++) {
            if ((str.charCodeAt(i) >= 0) && (str.charCodeAt(i) <= 255))
                sum = sum + 1;
            else
                sum = sum + 2;
        }
        return sum;
    }
    // 判断字符串的长度 #结束------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    // 控件隐藏
    function controlHide(strID) {
        if (document.getElementById(strID))
            document.getElementById(strID).style.display = "none";
    }
    // 控件显示
    function controlShow(strID) {
        if (document.getElementById(strID))
            document.getElementById(strID).style.display = "block";
    }
    // 设置控件Html里面的值
    function setHtmlValue(strID, value) {
        value = SiftNullAndEmpty(value);
        document.getElementById(strID).innerHTML = value;
    }
    // 设置控件Html里面的值
    function setMsgValue(strID, value) {
        value = SiftNullAndEmpty(value);
        document.getElementById(strID).msg = value;
    }
    // 设置控件的值
    function setReadonly(strID) {
        document.getElementById(strID).style.background = '#eee';
        document.getElementById(strID).readOnly = true;
        document.getElementById(strID).blur();
        document.getElementById(strID).focus();
    }
    // 设置控件的值
    function setValue(strID, value) {
        value = SiftNullAndEmpty(value);
        Ext.get(strID).dom.value = value;
    }

    // 过滤空字符，避免返回为undefined。
    function SiftNullAndEmpty(value) {
        if (!(value == "undefined" || value == null)) {
            return value;
        }
        return '';
    }

    // 设置时间格式。
    function SetTimeMode(value) {
        if (!(value == null || value == "undefined" || value == '' || value == 'Mon Jan 1 08:00:00 UTC+0800 1')) {
            value = value.toLocaleDateString();
            value = value.replace("年", '-');
            value = value.replace("月", '-');
            value = value.replace("日", '');
            return value;
        }
        return '';
    }
    // 回车键按钮提交
    function keySearch(btnName) {
        if (event.keyCode == 13)                             // 回车键的键值为13
            document.getElementById(btnName).click();         // 调用登录按钮的登录事件
    }
    // 验证有小数点的正整数
    function CheckNumber(obj) {
        obj.value = obj.value.replace(/\D/, '');
    }
    // 验证正整数
    function limitNum(obj) {
        obj.value = obj.value.replace(/\D/g, '');
    }
    // 四舍五入的方法
    function ForDight(Dight, How) {
        Dight = Math.round(Dight * Math.pow(10, How)) / Math.pow(10, How);
        return Dight;
    }

    // 得到表单元素对象
    function getParameters(tfrm) {
        // 临时值
        var tempvalues = {};

        // 迭代表带元素
        for (i = 0; i < tfrm.elements.length; i++) {
            // 元素对象
            var ele = tfrm.elements[i];

            if (ele.type == "radio" || ele.type == "checkbox") {
                if (!ele.checked)
                    continue;
            }

            if (!(tfrm.elements[i].name) || tfrm.elements[i].name == "")
                continue;

            // 对字符串进行编码
            var name = escape(tfrm.elements[i].name);

            // 编码
            var value = tfrm.elements[i].value;
            var obj = {};
            obj[name] = value;

            // 拷贝属性
            Ext.applyIf(tempvalues, obj);
        }
        return tempvalues;
    }
    // 获取参数的数值
    function GetParastr(Name) {
        var hrefstr, pos, parastr, para, tempstr;
        hrefstr = window.location.href;
        pos = hrefstr.indexOf("?")
        parastr = hrefstr.substring(pos + 1);
        para = parastr.split("&");
        tempstr = "";
        for (i = 0; i < para.length; i++) {
            tempstr = para[i];
            pos = tempstr.indexOf("=");
            if (tempstr.substring(0, pos) == Name) {
                return tempstr.substring(pos + 1);
            }
        }
        return null;
    }
    // 设置月份的大小写
    function SetMonthInfo(value) {
        if (value == '1') return '一';
        else if (value == '2') return '二';
        else if (value == '3') return '三';
        else if (value == '4') return '四';
        else if (value == '5') return '五';
        else if (value == '6') return '六';
        else if (value == '7') return '七';
        else if (value == '8') return '八';
        else if (value == '9') return '九';
        else if (value == '10') return '十';
        else if (value == '11') return '十一';
        else if (value == '11') return '十二';
        else return '';
    }
    // 得到选中的ID。
    function getSelectID(gridStor, stID) {
        var row = gridStor.getSelections();
        var ids = "";
        for (var i = 0, len = row.length; i < len; i++) {
            if (i == 0)
                ids = row[i].get(stID);
            else
                ids = ids + "," + row[i].get(stID);
        }
        return ids;
    }

    //****************************************************
    //  名      称：QueryString
    //  说      明：获取页面调用传递URL的参数
    //  参      数：item 传递过来的参数项
    //  返  回  值：传递过来参数项的值
    //              
    //
    //---------------------------------------------------
    //  作者：熊飞   最新修改时间：2009/4/02
    //****************************************************
    function QueryString(item) {
        var sValue = document.URL.match(new RegExp("[\?\&]" + item + "=([^\&]*)(\&?)", "i"))
        return sValue ? sValue[1] : sValue
    }

    //****************************************************
    //  名      称：StringTrim
    //  说      明：去掉字符串左右空格
    //  参      数：s字符串
    //  返  回  值：传递过来参数项的值
    //              
    //
    //---------------------------------------------------
    //  作者：李丽艳   最新修改时间：2009/10/12
    //****************************************************
    function StringTrim(s) {
        return s.replace(/(^\s*)|(\s*$)/g, "");
    }

    // 显示模式窗体
    function ShowWorkFlowInfoWin(value) {
        var isMonitor = false;
        if (value == true || value == 'true') isMonitor = true;
        OpenWorkFlowWindow('../../ConsignApplyOrder/WorkFlowInfo.aspx?ProcessInstanceID=' + ProcessInstanceID + '&isMonitor=' + isMonitor, '_top', 870, 580, 'modal', false);
    }
    // 打开模式窗体的方法。
    function OpenWorkFlowWindow(url, target, w, h, mode, refurbish) {
        var hWin = true;
        if (mode == 'modal') {
            hWin = window.showModalDialog(url, target, 'status:no;scrollbars;no;help:no;resizable:no;menubar=no;toolbar=no;location=no;dialogwidth:' + w + 'px;dialogheight:' + h + 'px');
        }
        else {
            hWin = window.open(url, target, 'width=' + w + 'px,height=' + h +
                                    'px,left=' + (screen.width - w) / 2 + 'px,top=' + (screen.height - h) / 2 +
                                    'px,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no,alwaysRaised=yes');
        }
        if (refurbish) this.location = this.location;  // 刷新父窗体  onunload=""
    }


    //****************************************************
    //  名      称：contains
    //  说      明：扩展Aarray对象contains方法
    //  参      数：needle字符串
    //  返  回  值：true or false
    //              
    //
    //---------------------------------------------------
    //****************************************************
    Array.prototype.contains = function(needle) {
        for (i in this) {
            if (this[i] == needle) return true;
        }
        return false;
    }

    // 获取季度所在的月份
    function GetMonthAtSeasion() {
        var nowMonth = new Date().getMonth() + 1;
        if (nowMonth >= 1 && nowMonth <= 3) {
            return 1;
        }
        if (nowMonth >= 4 && nowMonth <= 6) {
            return 2;
        }
        if (nowMonth >= 7 && nowMonth <= 9) {
            return 3;
        }
        if (nowMonth >= 10 && nowMonth <= 12) {
            return 4;
        }
    }
    // 校验字符长度
    function CheckStrLength(strVlue, Length, Msg) {
        strVlue = strVlue.toString();
        var i, sum;
        sum = 0;
        for (i = 0; i < strVlue.length; i++) {
            if ((strVlue.charCodeAt(i) >= 0) && (strVlue.charCodeAt(i) <= 255))
                sum = sum + 1;
            else
                sum = sum + 2;
        }
        if (sum >= Length) return Msg + " 输入长度不能大于" + Length + "个字节！<br/>";
        else return "";
    }
    // 校验字符是否为空
    function CheckIsNull(strVlue) {
        if (strVlue == null || strVlue.toString().trim() == "") return true;
        else return false;
    }
    // 返回部门名称简称
    function GetOrganName(organID) {
        if (organID == null || organID == '' || organID == '0') return '';
        else if (organID == '4004') return '一';
        else if (organID == '4005') return '二';
        else if (organID == '4006') return '三';
        else return '';
    }
    // 清除非数据的字符
    function clearNoNum(obj) {
        //先把非数字的都替换掉，除了数字和.
        obj.value = obj.value.replace(/[^\d.]/g, "");
        //必须保证第一个为数字而不是.
        obj.value = obj.value.replace(/^\./g, "");
        //保证只有出现一个.而没有多个.
        obj.value = obj.value.replace(/\.{2,}/g, ".");
        //保证.只出现一次，而不能出现两次以上
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
    }




    // Ext窗口 #开始 -----------------------------------------------------------------------------------------------

    extCommonWindowInstance = new Array(); // ext窗口实例数组

    //****************************************************
    //  名      称：NewExtWindow
    //  说      明：Ext窗口构造函数
    //  参      数：
    //              title           窗口标题
    //              width           宽度
    //              height          高度
    //              url             地址
    //              opener          调用对象
    //              iframe          使用iframe: true/false
    //              params          参数
    //              buttons         按钮数组
    //              closeWindowId   要执行的关闭按钮ID
    //  返  回  值：无
    //              
    //---------------------------------------------------
    //  作者：谭传锐   最新修改时间：2009/4/28
    //****************************************************

    NewExtWindow = function(_cfg) {
        Ext.apply(this, _cfg);
    }

    Ext.apply(NewExtWindow.prototype, {
        title: '',
        url: '',
        width: '',
        height: '',
        window: '',
        opener: '',
        iframe: false,
        params: '',
        closeWindowId: null,
        showWindow: function() {
            if (this.iframe) {
                this.window = new Ext.Window({
                    xtype: 'window',
                    title: this.title,
                    width: this.width,
                    height: this.height,
                    layout: 'fit',
                    closeAction: 'close',
                    plain: true,
                    modal: true,
                    resizable: false,
                    iconCls: 'ext_WindowTitleIco',
                    html: '<iframe id="ext_common_window" src="' + this.url + '" width="100%" height="' + (this.height - 17) + '" frameborder="0" scrolling="No" ></iframe>',
                    listeners: {
                        beforeclose: function() {
                            var bool = true;
                            //var closeWindowId = GetExtCommonWindowInstance().closeWindowId;
                            var closeWindowId = 'closeWindowId';
                            if (closeWindowId != null) {
                                bool = false;
                                var ext_common_window = document.all['ext_common_window'];
                                if (typeof document.all['ext_common_window'].length != 'undefined')
                                    ext_common_window = document.all['ext_common_window'][document.all['ext_common_window'].length - 1];
                                if (ext_common_window.contentWindow) {
                                    var el = ext_common_window.contentWindow.document.all[closeWindowId];
                                    if (el) {
                                        el.click();
                                    }
                                }
                            } else {
                                extCommonWindowInstance.pop(); // 释放窗口对象
                            }
                            return bool;
                        }
                    }
                });
            } else {
                this.window = new Ext.Window({
                    xtype: 'window',
                    title: this.title,
                    width: this.width,
                    height: this.height,
                    layout: 'fit',
                    closeAction: 'close',
                    plain: true,
                    modal: true,
                    resizable: false,
                    iconCls: 'ext_WindowTitleIco',
                    autoLoad: { url: this.url, scripts: true, nocache: true },
                    listeners: {
                        beforeclose: function() {
                            var bool = true;
                            var closeWindowId = GetExtCommonWindowInstance().closeWindowId;
                            if (closeWindowId != null) {
                                bool = false;
                                if (document.all[closeWindowId]) {
                                    var el = document.all[closeWindowId];
                                    if (el) {
                                        el.click();
                                    }
                                }
                            }
                            return bool;
                        },
                        close: function() {
                            extCommonWindowInstance.pop(); // 释放窗口对象
                        }
                    }
                });
            }

            this.window.show();
            extCommonWindowInstance.push(this); // 添加到窗口对象数组里
        },
        closeWindow: function() {
            if (this.iframe) {
                extCommonWindowInstance.pop(); // 释放窗口对象
                if (mainFrame != undefined && mainFrame != null)
                    mainFrame.focus();
            }
            this.window.hide(null, function() {
                this.fireEvent('close', this);
                this.destroy();
            }, this.window);
        }
    });
    //****************************************************
    //  名      称：GetExtCommonWindowInstance
    //  说      明：取得Ext窗口对象实例
    //  参      数：无
    //  返  回  值：无
    //              
    //---------------------------------------------------
    //  作者：谭传锐   最新修改时间：2009/4/28
    //****************************************************
    function GetExtCommonWindowInstanceToHeader() {
        return extCommonWindowInstance[extCommonWindowInstance.length - 1];
    }
    // Ext窗口 #结束 -----------------------------------------------------------------------------------------------

    //****************************************************
    //  名      称：SetTableDisplay
    //  说      明：对控件显示规则进行控制
    //  参      数：显示规则数组
    //  displayobjArray 结构如下：
    //  GroupID：分组容器ID,
    //  GroupDisplay:分组是否显示，布尔值
    //  MemberDisplay:数组{ID(控件ID),DisplayWay(显示方式，有三种值，readonly为只读的，Hide为隐藏，不传或空字符串则为正常显示)}
    //  返  回  值：无
    //              
    //---------------------------------------------------
    //  作者：郑燕彬   最新修改时间：2010/7/14
    //****************************************************
    function SetTableDisplay(displayobjArray) {
        if (displayobjArray) {
            if (displayobjArray.length) {
                for (var i = 0; i < displayobjArray.length; i++) {
                    var group = document.getElementById(displayobjArray[i].GroupID);
                    //                  var groupName = displayobjArray[i].GroupDisplayName;
                    if (group) {
                        if (displayobjArray[i].GroupDisplay == false) {
                            group.style.display = "none";
                        }
                        //                      if (groupName) {
                        //                          if (group.innerText) group.innerText = groupName;
                        //                      }
                    }
                    var groupmenber = displayobjArray[i].MemberDisplay;
                    if (groupmenber && groupmenber.length) {
                        for (var k = 0; k < groupmenber.length; k++) {
                            var isext = true;
                            var con = Ext.getCmp(groupmenber[k].ID);
                            if (con == undefined) {
                                con = document.getElementById(groupmenber[k].ID);
                                isext = false;
                            }
                            if (con) {
                                if (groupmenber[k].DisplayWay) {
                                    ConConsDisplay(con, groupmenber[k].DisplayWay, isext);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    function ConConsDisplay(conObj, display, isext) {
        if (conObj) {
            if (isext) {
                conObj.editable = true;
                conObj.disabled = true;
                document.getElementById(conObj.id).className = "input_l100p_right_style input_readonly_style";
            }
            else {
                switch (conObj.tagName.toUpperCase()) {
                    case 'INPUT':
                        if (display && display == 'readonly') {
                            conObj.readOnly = true;
                            conObj.className = "input_l100p_right_style input_readonly_style";
                        }
                        break;
                }
            }
            if (display == 'Hide') {
                conObj.style.display = 'none';
                SetTdHid(conObj);
            }
        }
    }
    function SetTdHid(conobj) {
        var td = conobj;
        while (td.tagName.toUpperCase() != 'TD') {
            td = conobj.parentNode;
        }
        td.style.display = 'none';
        if (td.previousSibling) td.previousSibling.style.display = 'none';
        var tr = td.parentNode;
        if (tr) {
            var childcount = tr.childNodes.length;
            var alltdcount = 0;
            var inputtd;
            for (var i = 0; i < childcount; i++) {
                if (tr.childNodes[i].style.display == 'none') {
                    alltdcount++;
                }
                if ((tr.childNodes[i].getElementsByTagName('input').length > 0 || tr.childNodes[i].getElementsByTagName('div').length > 0) && tr.childNodes[i].style.display != 'none') {
                    inputtd = tr.childNodes[i];
                }
            }
            if (inputtd) {
                inputtd.colSpan = (alltdcount + 1).toString();
            }
        }
    }
    function AddListlink(linkarray) {
        var text = "";
        if (linkarray) {
            for (var i = 0; i < linkarray.length; i++) {
                text += "<a href=\"javascript:" + linkarray[i].clickevent + "\">" + linkarray[i].text + "</a>";
                if (i != linkarray.length - 1) {
                    text += " | ";
                }
            }
        }
        return text;
    }

    // 打开模式窗体的方法。
    function OpenModeWindow(url, target, w, h, mode, refurbish) {
        var hWin = true;
        if (mode == 'modal') {
            hWin = window.showModalDialog(url, target, 'status:no;scrollbars;no;help:no;resizable:no;menubar=no;toolbar=no;location=no;dialogwidth:' + w + 'px;dialogheight:' + h + 'px');
        }
        else {
            hWin = window.open(url, target, 'width=' + w + 'px,height=' + h +
                                        'px,left=' + (screen.width - w) / 2 + 'px,top=' + (screen.height - h) / 2 +
                                        'px,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no,alwaysRaised=yes');
        }
        //if (refurbish) doSearchHWTransferInfo(false);
    }

    /**
    *描述 : 渲染列, 左对齐，鼠标移该单元格上面，显示完整的值
    *参数 : value：单元格的值；
    */
    function renderValue(value, metadate, record, colIndex, rowIndex) {
        return '<div style="text-align:left;"><span title="' + value + '">' + value + '</span></div>';
    }

    /**
    *描述 : 渲染时间列，左对齐，鼠标移该单元格上面，显示完整的值
    *参数 : value：单元格的值；
    */
    function renderDateValue(value, metadate, record, colIndex, rowIndex) {
        var strStartDate = new Date(value).dateFormat('Y-m-d');
        return '<div style="text-align:center;"><span title="' + strStartDate + '">' + strStartDate + '</span></div>';
    }